1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <cstdio> #include <cstring> #include <algorithm> const int maxn = 1e5 + 5; using namespace std; char a[maxn], b[maxn]; int n, cnt[26], c[2][26]; int main(){
scanf("%s%s", a + 1, b + 1); int n = strlen(a + 1); for (int i = 1; i <= n; i++) cnt[a[i] - 'A']++, cnt[b[i] - 'A']--, c[0][a[i] - 'A']++; int res = 0, x = -1; for (int j = 0; j < 26; j++){ res += max(cnt[j], 0); if (cnt[j] < 0 && x == -1) x = j; if (cnt[j] > 0) c[1][j] = cnt[j]; } printf("%d\n", res); for (int i = 1; i <= n; i++){ if (cnt[a[i] - 'A'] == 0) continue; if (cnt[a[i] - 'A'] > 0){ if (a[i] - 'A' > x || c[0][a[i] - 'A'] == c[1][a[i] - 'A']){ --cnt[a[i] - 'A']; --c[0][a[i] - 'A']; --c[1][a[i] - 'A']; a[i] = x + 'A'; ++cnt[x]; while (cnt[x] >= 0 && x < 25) ++x; } else c[0][a[i] - 'A']--; } } printf("%s\n", a + 1); return 0; }
|